﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAL;

public partial class master_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Tbl_Usuarios User = (Tbl_Usuarios)Session["CurrentUser"];
            if (User != null && User.iRol_id != 1)// 1 = contador; 2 = admin; 3 = encargado AF
            {
                accControlBoard.Visible = false;
                grv_ActivoFijo.Columns[0].Visible = false;
            }
            else if (User == null)
            {
                Response.Redirect("Credentials.aspx");
            }
            ModContabilidad cont = new ModContabilidad();
            List<Tbl_TiposActivosFijos> listRubro = cont.getAllTiposActivo();
            Tbl_TiposActivosFijos tipoVacio = new Tbl_TiposActivosFijos();
            tipoVacio.iTipoActivo_id = 0;
            tipoVacio.sCodigoActivoFijo = "-Rubro-";
            listRubro.Insert(0, tipoVacio);
            comboRubros.DataSource = listRubro;
            comboRubros.DataTextField = "sCodigoActivoFijo";
            comboRubros.DataValueField = "iTipoActivo_id";
            comboRubros.DataBind();
            int pAnho = cont.getPrimerAno();
            int firstYear = (pAnho > 0) ? pAnho : DateTime.Today.Year;
            comboYear.DataSource = comboRange(firstYear);
            comboYear.DataValueField = "Year";
            comboYear.DataTextField = "StrYear";
            comboYear.DataBind();
        }
    }

    protected string getPersona(string id)
    {
        int ipersona = Convert.ToInt32(id);
        ModPersona modPersona = new ModPersona();
        Tbl_Personas persona = modPersona.getPersona(ipersona);
        return (persona != null) ? persona.sNombre + " " + persona.sApellido_paterno + " " + persona.sApellido_Materno : "null";
    }

    protected string formatDate(Object date)
    {
        DateTime current_date = (DateTime)date;
        return current_date.ToString("dd/MM/yyyy"); ;
    }

    protected string getEstadoActivo(string iestado)
    {
        bool b = Convert.ToBoolean(iestado);
        return (b) ? "Activo" : "Inactivo";
    }
    protected void add_Click(object sender, EventArgs e)
    {
        Response.Redirect("ActivoFijoForm.aspx?ActivoID=0");
    }
    protected void btnSearch_Click(object sender, EventArgs e)
    {
        string month = comboMonths.SelectedValue;
        string year = comboYear.SelectedValue;
        string rubro = comboRubros.SelectedValue;
        //LinqDataSource1
        if (month.Equals("0") && year.Equals("0") && rubro == "0" && txtDescripcion.Text.Trim().Equals(""))
        {
            grv_ActivoFijo.DataSourceID = "LinqDataSource1";
            grv_ActivoFijo.DataSource = null;
            grv_ActivoFijo.DataBind();
        }
        else
        {
            ModContabilidad contabilidad = new ModContabilidad();
            List<Tbl_ActivoFijos> listaActivo = new List<Tbl_ActivoFijos>();
            if (month == "0" && year == "0" && rubro == "0" && txtDescripcion.Text.Trim() != "")
            {
                listaActivo = contabilidad.FiltroActivo(txtDescripcion.Text);
            }
            else if (month == "0" && year == "0" && rubro != "0" && txtDescripcion.Text.Trim() == "")
            {
                listaActivo = contabilidad.FiltroActivo(Convert.ToInt32(rubro));
            }
            else if (month != "0" && year != "0" && rubro != "0" && txtDescripcion.Text.Trim() == "")
            {
                string sFecha = month + "/01/" + year;
                listaActivo = contabilidad.FiltroActivo(txtDescripcion.Text, sFecha, Convert.ToInt32(rubro));
            }
            else if (month != "0" && year != "0" && rubro == "0" && txtDescripcion.Text.Trim() == "")
            {
                string sFecha = month + "/01/" + year;
                listaActivo = contabilidad.FiltroActivo(sFecha, Convert.ToInt32(rubro));
            }
            else if (month != "0" && year != "0" && rubro != "0" && txtDescripcion.Text.Trim() != "")
            {
                string sFecha = month + "/01/" + year;
                listaActivo = contabilidad.FiltroActivo(txtDescripcion.Text, sFecha, Convert.ToInt32(rubro));
            }
            grv_ActivoFijo.DataSource = (listaActivo != null) ? listaActivo : null;
            grv_ActivoFijo.DataSourceID = "";
            grv_ActivoFijo.DataBind();
        }
    }
    [WebMethod(EnableSession = true)]
    public static bool DarDeBaja(string idActivo, string fecha, string motivo)
    {
        ModContabilidad cont = new ModContabilidad();

        Tbl_ActivoFijos af = cont.getActivoporID(Convert.ToInt32(idActivo));
        Tbl_Usuarios user = (Tbl_Usuarios)HttpContext.Current.Session["CurrentUser"];
        cont.darBajaActivo(af, fecha, motivo, user.iUsuario_id);

        return true;
    }

    protected bool checkVisibility(string idActivo)
    {
        Tbl_Usuarios User = (Tbl_Usuarios)Session["CurrentUser"];
        if (User.iRol_id != 2)
        {

            return false;
        }
        else
        {
            int id = Convert.ToInt32(idActivo);
            //se chequea si se puede borrar en el caso q si se pueda se retorna true si no false
            ModContabilidad cont = new ModContabilidad();
            Tbl_ActivoFijos activo = cont.getActivoporID(Convert.ToInt32(idActivo));
            if (activo != null && activo.iDepreciacionAcumulada == 0)
            {
                return true;
            }
            return false;
        }
    }

    protected bool EliminarActivoFijo(string idActivo)
    {
        return false;
    }

    protected void checkControl(object sender, EventArgs e)
    {
        CheckBox headerChkBox = ((CheckBox)grv_ActivoFijo.HeaderRow.FindControl("chkHeader"));

        if (headerChkBox.Checked == true)
        {
            foreach (GridViewRow gvRow in grv_ActivoFijo.Rows)
            {
                CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox"));

                rowChkBox.Checked = true;
            }
        }
        else
        {
            foreach (GridViewRow gvRow in grv_ActivoFijo.Rows)
            {
                CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox"));
                rowChkBox.Checked = false;
            }
        }
    }
    protected void btnDepreciar_Click(object sender, EventArgs e)
    {
        if (dtDepreciacion.Text != null && !dtDepreciacion.Text.Trim().Equals(""))
        {
            ModContabilidad cont = new ModContabilidad();

            List<Tbl_ActivoFijos> listActivos = new List<Tbl_ActivoFijos>();
            foreach (GridViewRow gvRow in grv_ActivoFijo.Rows)
            {
                CheckBox ChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox"));
                if (ChkBox.Checked)
                {
                    HiddenField rowChkBox = ((HiddenField)gvRow.FindControl("idActivo"));
                    string sActivoId = rowChkBox.Value;
                    Tbl_ActivoFijos activo = cont.getActivoporID(Convert.ToInt32(sActivoId));
                    if (activo != null)
                    {
                        listActivos.Add(activo);
                    }
                }
            }
            ModUFV ufv = new ModUFV();
            List<String> listUFV = ufv.listUfvFaltantes(listActivos, dtDepreciacion.Text);
            if (listUFV.Count == 0)
            {
                Tbl_Usuarios user = (Tbl_Usuarios)Session["CurrentUser"];
                if (listActivos.Count > 0 && user != null)
                {
                    cont.despreciarActivoFijo(listActivos, user.iUsuario_id, dtDepreciacion.Text);
                    lblUFV.Text = "";
                    Response.Redirect("ActivoFijoDepList.aspx");
                }
                else
                {
                    lblUFV.Text = "No se seleccionó un Activo";
                }
            }
            else
            {
                lblUFV.Text = "Existen UFV Faltantes";
            }
        }
        else
        {
            lblUFV.Text = "Se debe insertar una fecha limite";
        }
    }

    public bool checkMejoras(string idActivo)
    {
        ModContabilidad mod = new ModContabilidad();
        List<Tbl_ActivoFijos> list = mod.getAllmejorasActivo(Convert.ToInt32(idActivo));
        if (list != null && list.Count > 0)
        {
            return true;
        }
        return false;
    }

    private List<YearCombo> comboRange(int initYear)
    {
        List<YearCombo> lstYear = new List<YearCombo>();
        DateTime dt = DateTime.Today;
        int currentYear = dt.Year;
        YearCombo year = new YearCombo();
        lstYear.Add(year);
        for (int i = initYear; i <= currentYear; i++)
        {
            lstYear.Add(new YearCombo(i));
        }
        return lstYear;
    }

    public class YearCombo
    {
        private int year;

        public int Year
        {
            get { return year; }
            set { year = value; }
        }
        private string strYear;

        public string StrYear
        {
            get { return strYear; }
            set { strYear = value; }
        }

        public YearCombo(int y)
        {
            this.year = y;
            this.strYear = this.year + "";
        }

        public YearCombo()
        {
            this.year = 0;
            this.strYear = "-Año-";
        }
    }

    protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        string month = comboMonths.SelectedValue;
        string year = comboYear.SelectedValue;
        string dt = month + "/01/" + year;
        string rubro = comboRubros.SelectedValue;
        ModContabilidad contabilidad = new ModContabilidad();
        List<Tbl_ActivoFijos> listaActivo = new List<Tbl_ActivoFijos>();
        if (month == "0" && year == "0" && rubro == "0" && txtDescripcion.Text.Trim() != "")
        {
            listaActivo = contabilidad.FiltroActivo(txtDescripcion.Text);
            grv_ActivoFijo.DataSource = listaActivo;
        }
        else if (month == "0" && year == "0" && rubro != "0" && txtDescripcion.Text.Trim() == "")
        {
            listaActivo = contabilidad.FiltroActivo(Convert.ToInt32(rubro));
            grv_ActivoFijo.DataSource = listaActivo;
        }
        else if (month != "0" && year != "0" && rubro == "0" && txtDescripcion.Text.Trim() == "")
        {
            string sFecha = month + "/01/" + year;
            listaActivo = contabilidad.FiltroActivo(txtDescripcion.Text, sFecha, Convert.ToInt32(rubro));
            grv_ActivoFijo.DataSource = listaActivo;
        }
        else if (month != "0" && year != "0" && rubro == "0" && txtDescripcion.Text.Trim() == "")
        {
            string sFecha = month + "/01/" + year;
            listaActivo = contabilidad.FiltroActivo(sFecha, Convert.ToInt32(rubro));
            grv_ActivoFijo.DataSource = listaActivo;
        }
        else if (month != "0" && year != "0" && rubro != "0" && txtDescripcion.Text.Trim() != "")
        {
            string sFecha = month + "/01/" + year;
            listaActivo = contabilidad.FiltroActivo(txtDescripcion.Text, sFecha, Convert.ToInt32(rubro));
            grv_ActivoFijo.DataSource = listaActivo;
        }
        else
        {
            grv_ActivoFijo.DataSourceID = "LinqDataSource1";
            grv_ActivoFijo.DataSource = null;
        }
        grv_ActivoFijo.PageIndex = e.NewPageIndex;
        grv_ActivoFijo.DataBind();
    }
    protected void comboRubros_SelectedIndexChanged(object sender, EventArgs e)
    {
        ModContabilidad cont = new ModContabilidad();
        string sTipo = comboRubros.SelectedValue;
        if (sTipo != "0")
        {
            Tbl_TiposActivosFijos tipoActivo = cont.getTipo(Convert.ToInt32(sTipo));
            srchTitle.InnerHtml = "Busqueda de Activos Fijos - '" + tipoActivo.sTipoActivo + "'";
        }
        else
        {
            srchTitle.InnerHtml = "Busqueda de Activos Fijos";
        }
    }

    protected string getVidaResidual(string iActivo)
    {
        ModContabilidad mod = new ModContabilidad();
        Tbl_ActivoFijos activo = mod.getActivoporID(Convert.ToInt32(iActivo));
        if(activo== null)
        {
            return "null";
        }
        return mod.getMesesDeVida(activo)+"";
    }

    [WebMethod]
    public static bool EliminarActivo(string sActivo)
    {
        ModContabilidad cont = new ModContabilidad();
        int iActivo = Convert.ToInt32(sActivo);
        Tbl_ActivoFijos activo = cont.getActivoporID(iActivo);
        if (activo != null)
        {
            cont.delActivoFijo(activo);
            return true;
        }
        return false;
    }
}